昨天講解index的資料結構,今天我們要來講解index相關的設定,我們應該選擇哪些欄位,建立索引,以及不同的索類型。
在建立索引之前,首先必須決定好我們要建立哪一個欄位的索引,比如說我們現在有許多筆商品資料,資料結構如下。
{ _id: 1, name: "滑鼠", price: 600, amount: 10 }
在建立collection的當下,MongoDB本身就會自動幫我們建立_id的索引,預設會使用Unique Indexes,Unique Indexes會確保索引欄位沒有重複的值出現,意思是不會有兩筆資料的_id是一樣的。
因此在我們沒有主動建立索引的情況下,並且資料數量十分龐大的情況下,我們單獨使用_id來搜尋條件,會比使用 name、price、amount搜尋還要快。
但一般來說除非是前端要顯示特定商品的頁面,傳給後端商品_id值,讓後端回傳商品的詳細資料,大多數情況都是針對特定欄位給予條件進行搜尋。
比如說消費者很常使用商品的價格進行搜尋,這時候就可以針對price加上索引,建立的語法如下。
db.product.createIndex( { price: 1 } )
基本上就是在createIndex帶入一個物件,寫入你要建立index的欄位,在用 1 或是 -1決定資料的排序方向,如果是1就會按照商品價格,由小到大排序資料, -1 則是由大到小排序資料。
索引成功建立後,我們利用商品價格搜尋資料,就會命中到price_1這個索引,進而加快搜尋的速度,但是如果我們是使用商品名稱來搜尋,就不會命中到任何索引。
因此在建立索引時,必須先想好常用的搜尋場景,會使用到哪些欄位做為搜尋條件,才能建立最合適的索引。
ps. 目前示範只包含一個欄位的索引,被稱為Single Field Indexes,欄位的順序其實不太重要,填寫1 或是 -1不會有太大的差別,而明天會介紹到的Compound Index,可以包含許多欄位,這時候欄位的先後順序,以及資料排序就會影響到搜尋的效率了。
本篇文章同步放在我的部落格,大家有空可以進來逛逛